class OuterClass {
    //普通成员变量，实例成员变量
    public int data1 = 10;
    int data2 = 20;
    public static int data3 = 30;

    /*
    实例内部类：1.如何实例化内部类对象？
               答；外部类名.内部类名 变量= 外部类对象的引用.new InnerClass();
              2.在实例内部类中不能定义静态的成员变量吗？（就跟在普通的方法类中不能定义静态变量一样）
              但是要定义必须是编译的时候确定的值
              （也就是必须是static final修饰的，是一种语法）
               public static final int data6=60;常量的意思；编译的时候 就确定这个值是几了
                                               如果不加final就是一个静态的变量。
              3.实例内部类当中，如果有成员变量和外部类的成员变量重命名了怎么办？
              答；优先使用内部
              如何拿到外部类？
             答； OuterClass.this.data1
                     System.out.println("%%"+OuterClass.this.data1);
                     意识到了：实例内部类中 不仅包含自己的this还包含了外部类的this
               4.不能包含静态方法
     */
    class InnerClass {
        public int data1 = 1000;//3
        public int data4 = 40;
        private int data5 = 50;
        public static final int data6 = 60;//2.

        public InnerClass() {
            System.out.println("InnerClass的构造方法！");
        }

        public void method() {
            System.out.println("InnerClass的一个method方法");
            System.out.println("%%" + OuterClass.this.data1);
        }
    }
}

    public class TestDemo {
        public static void main(String[] args) {

            OuterClass outerClass=new OuterClass();
            //访问一下data1
            System.out.println(outerClass.data1);
            System.out.println(outerClass.data2);
            //outerClass.methodOut();


            //外部类名.内部类名 变量= 外部类对象的引用.new InnerClass();
            //下面是两种写法
            OuterClass.InnerClass innerClass = outerClass.new InnerClass();
            OuterClass.InnerClass innerClass2 = new OuterClass().new InnerClass();
            innerClass.method();

            //new OuterClass()叫做匿名对象；一般使用在只用一次的时候
            System.out.println(new OuterClass().data1);
            //new就是实例化一个对象,用一次要new一次
            System.out.println(new OuterClass().data2);
        }
    }




